/***********************************************************************************
 @file   
 @author
 @attention
 ***********************************************************************************/
#include "mid_lpuart.h"
/***********************************************************************************
 * @parameter
***********************************************************************************/
uint8_t u8RxData = 0U;
uint8_t aa[30] = {//test  lpuart_send(aa,30);
 1,  2,  3,  4,  5,  6,  7,  8,  9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30};
/***********************************************************************************
 * @brief  
***********************************************************************************/
void lpuart_lora_config_init(void)
{
    stc_lpuart_cfg_t  stcCfg;

    DDL_ZERO_STRUCT(stcCfg);                        ///< 结构体变量初始值置零

    ///<外设模块时钟使能
    Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart1,TRUE);

    ///<LPUART 初始化
    stcCfg.enStopBit = LPUart1bit;                   ///<1停止位
    stcCfg.enMmdorCk = LPUartEven;                   ///<偶校验
    stcCfg.stcBaud.enSclkSel = LPUartMskRcl;         ///<传输时钟源
    stcCfg.stcBaud.u32Sclk = 38400;                  ///<RCL时钟频率 38400Hz//32768
    stcCfg.stcBaud.enSclkDiv = LPUartMsk4Or8Div;     ///<采样分频
    stcCfg.stcBaud.u32Baud = 9600;                   ///<波特率
    stcCfg.enRunMode = LPUartMskMode3;               ///<工作模式
    LPUart_Init(M0P_LPUART1, &stcCfg);

    ///<LPUART 中断使能
    LPUart_ClrStatus(M0P_LPUART1,LPUartRC);         ///<清接收中断请求
    LPUart_ClrStatus(M0P_LPUART1,LPUartTC);         ///<清发送中断请求
    LPUart_DisableIrq(M0P_LPUART1,LPUartRxIrq);     ///<禁止接收中断
    LPUart_EnableIrq(M0P_LPUART1,LPUartTxIrq);      ///<使能发送中断
    EnableNvic(LPUART1_IRQn,IrqLevel3,TRUE);        ///<系统中断使能
}
/***********************************************************************************
 * @brief   端口配置
***********************************************************************************/
void lpuart_lora_init(void)
{
    stc_gpio_cfg_t stcGpioCfg;

    DDL_ZERO_STRUCT(stcGpioCfg);                            ///< 结构体变量初始值置零

    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);  ///< 使能GPIO时钟

//    App_LpUartDeepSleepCfg();//深度休眠模式外部端口配置(STK)

    ///<TX
    stcGpioCfg.enDir =  GpioDirOut;
    Gpio_Init(GpioPortC,GpioPin10,&stcGpioCfg);
    Gpio_SetAfMode(GpioPortC,GpioPin10,GpioAf1); //配置PC10为LPUART1_TX

    //<RX
    stcGpioCfg.enDir =  GpioDirIn;
    Gpio_Init(GpioPortC,GpioPin11,&stcGpioCfg);
    Gpio_SetAfMode(GpioPortC,GpioPin11,GpioAf1); //配置PA01为LPUART1_RX
    
    lpuart_lora_config_init();
}
/***********************************************************************************
 * @brief  LPUART1 中断服务函数
***********************************************************************************/
void LpUart1_IRQHandler(void)
{
    if(LPUart_GetStatus(M0P_LPUART1, LPUartTC))       ///接收数据中断
    {
        LPUart_ClrStatus(M0P_LPUART1, LPUartTC);      ///<清发送中断请求

        LPUart_DisableIrq(M0P_LPUART1,LPUartTxIrq);   ///<禁止发送中断
        LPUart_EnableIrq(M0P_LPUART1,LPUartRxIrq);    ///<使能接收中断
    }

    if(LPUart_GetStatus(M0P_LPUART1, LPUartRC))       ///接收数据中断
    {
        LPUart_ClrStatus(M0P_LPUART1, LPUartRC);      ///<清接收中断请求
        u8RxData = LPUart_ReceiveData(M0P_LPUART1);   ///读取数据

        LPUart_DisableIrq(M0P_LPUART1,LPUartRxIrq);   ///<禁止接收中断
        LPUart_EnableIrq(M0P_LPUART1,LPUartTxIrq);    ///<使能发送中断

        LPUart_SendDataIt(M0P_LPUART1, ~u8RxData);    ///把接收数据取反，并发送
    }
}

/***********************************************************************************
 * @brief  lpuart 发送数组
***********************************************************************************/
void lpuart_send(uint8_t* data,uint16_t len)
{
    for(uint16_t i=0;i<len;i++)
    {
        LPUart_SendDataTimeOut(M0P_LPUART1, data[i],0xff);
    }  
}

